package com.ghp.singleton.lazy;

import java.io.Serializable;

/**
 * @author 知识汲取者
 * @date 2025/7/15
 * @title 登记式懒汉
 * @description
 **/
public class LazySingleton3 implements Serializable {

    private static final long serialVersionUID = -6472820469534702098L;

    // Step1：私有化构造器，禁止外部创建实例
    private LazySingleton3() {
        if (LazySingleton3Inner.INSTANCE != null){
            throw new RuntimeException("单例模式不允许多个实例！");
        }
    }

    // Step2：创建静态内部类
    private static class LazySingleton3Inner {
        // Step3：创建静态成员变量，保存唯一实例
        private static final LazySingleton3 INSTANCE = new LazySingleton3();
    }

    // Step3：创建一个公开的静态成员方法，用来获取唯一实例
    public static LazySingleton3 getInstance() {
        return LazySingleton3Inner.INSTANCE;
    }

    /**
     * 获取反序列化后的对象
     * 反序列化时会检查有没有这个方法，如果有则会调用这个方法返回反序列化生成的对象
     *
     * @return
     */
    private Object readResolve() {
        return getInstance();
    }

}